﻿#include <stdio.h>

//int main()
//{
//	int a = 10;//创建整形类型的变量，名叫a, 并赋值为10
//
//	printf("abcdef\b");/*使用printf打印*/
//	return 0;
//}

//#include <stdbool.h>
//int main() {
//	_Bool flag = true;
//	bool flag2 = false;
//
//	if (flag)
//		printf("hehe\n");
//	return 0;
//}

//int main()
//{
//	printf("%zd\n", sizeof(char));
//	printf("%zd\n", sizeof(short));
//	printf("%zd\n", sizeof(int));
//	printf("%zd\n", sizeof(long));
//	printf("%zd\n", sizeof(long long));
//	printf("%zd\n", sizeof(float));
//	printf("%zd\n", sizeof(double));
//	printf("%zd\n", sizeof(long double));
//
//
//	return 0;
//}

//int main()
//{
//	int a = 10;
//
//	printf("%zd\n", sizeof(int));
//	printf("%zd\n", sizeof(a));
//	printf("%zd\n", sizeof(_Bool));
//	return 0;
//}


//int main()
//{
//	short s = 5;
//	int b = 10;
//
//	printf("%zd\n", sizeof(s = b + 1));
//
//	printf("%d\n", s);//要注意的是，sizeof里面的表达式是不会执行的,所以这里的s的值还是5
//
//	return 0;3
//}

//int main()
//{
//	//signed int --- 有符号的int
//	signed int num = 100;
//	num = -200;
//
//	//unsigned int
//	unsigned int num2 = 100;//无符号整数需要使用%u进行输出，使用%d输出会发生值混乱，后果自己承担。
//	num2 = 1000;
//	num2 = -111;
//	// 输出 num2 的值
//	printf("Using %%d: %d\n", num2); // 当使用 %d 输出，实际上是在将溢出的值进行补码输出，这里的补码算法恰好等于原来的负值
//	printf("Using %%u: %u\n", num2); // 使用 %u 输出
//	printf("Value as integer: %llu\n", (unsigned long long) num2); // 显示实际的无符号整数值
//
//	return 0;
//}



//int == signed int 是有符号的int
//对于有符号的整数打印应该使用%d
//
//对于无符号的整数打印应该使用%u
//
//int main()//将有符号值使用%u输出
//{
//	int num = -100;
//	printf("%u\n", num);
//
//	return 0;
//}

#include <stdbool.h>
//
//int num =100;//全局变量 - 共享单车
//// 
//int main()
//{
//	//局部变量 - 你们家的自行车
//	unsigned int age = 10;//初始化
//	age = 20;//赋值
//
//	printf("%u\n", age);
//	char ch = 'q';
//	float score = 3.14f;//表明 score 是一个 float 类型的变量，并且被初始化为 3.14,但是在C语言中，浮点数字面量默认是 double 类型。这意味着如果没有后缀，编译器将假定3.14这个数字是一个 double 类型的值
//	//如果没有后缀，默认情况下编译器会认为 3.14 是一个 double 类型的值。如果将一个 double 类型的值赋给一个 float 类型的变量，编译器会发出警告：
//	//使用 f 或 F 后缀可以明确指示浮点数字面量是一个 float 类型的值，这有助于提高代码的可读性和减少潜在的类型转换问题
//	double weight = 4.5;
//	bool flag = true;
//
//	return 0;
//}

//int main()
//{
//	{
//		int num = 10;
//		printf("%d\n", num);
//	}
//	//printf("%d\n", num);//err
//	return 0;
//}



//int m = 1000;
//int main()
//{
//	int m = 100;
//	printf("%d\n", m);//局部优先
//
//	return 0;
//}

//int main()
//{
//	int m = 100;
//	printf("%d\n", m);
//	m = 200;
//	printf("%d\n", m);
//	return 0;//这里如果没有写return 0,斌一起会默认插入return 0;使程序能够正确结束。
//}

//int main()
//{
//	printf("%d\n", 33 + 42);
//	int a = 10;
//	int b = 20;
//	printf("%d\n", a + b);
//	printf("%d\n", a + 23);
//}


//int main()
//{
//	printf("%d\n", 33 - 42);
//	int a = 10;
//	int b = 20;
//	printf("%d\n", a - b);
//	printf("%d\n", a - 23);
//
//	return 0;
//}

//int main()
//{
//	printf("%d\n", 5 * 5);
//	int a = 10;
//	int b = 20;
//	printf("%d\n", a * b);
//	printf("%d\n", a * 10);
//	return 0;
//}


//int main()
//{
//	printf("%d\n", 9 / 3);//3
//	printf("%d\n", 10 / 4);//2 得到的结果是2，而不是2.5，原因在于C语言里面的整数除法是整除，只会返回整数部分，丢弃小数部分。如果希望得到浮点数的结果，两个运算数必须至少有一个浮点数，这时C语言就会进行浮点数除法。
//	printf("%f\n", 10 / 4.0);//2.5    
//	printf("%f\n", 10.0 / 4);//2.5    要想输出的结果是浮点数，须要除数和被除数至少有一个是浮点数
//	printf("%f\n", 10.0 / 4.0);
//	return 0;
//}


//int main() {
//	int score = 5;
//	int score2 = 5;
//	score = (score / 20) * 100;//0 * 100
//	printf("%d\n", score);
//	score2 = (score2 / 20.0) * 100;// 0.25 * 100
//	printf("%d\n", score2);
//
//
//
//	return 0;
//}

//int main()
//{
//	printf("%d\n", 10 % 3);//10/3=3...1
//	/*int n = 0;
//	if (n%2)
//		*/
//
//	return 0;
//}


//int main()
//{
//	printf("%d\n", 11 % 5);//1
//	printf("%d\n", -11 % -5);//-1
//	printf("%d\n", -11 % 5);//-1
//
//	return 0;
//}

//int main()
//{
//	int a = 0;//初始化
//
//	a = 10;// 赋值， = 是赋值操作符
//
//	return 0;
//}


//int main()
//{
//	int a = 0;//初始化
//	a = a + 10;
//	a += 10;//复合赋值
//	
//	a = a - 3;//1
//	a -= 3;//2
//
//	a = a + 1;
//	a += 1;
//	a++;
//	return 0;
//
//}

//++ --
//int main()
//{
//	int a = 5;
//	a = a + 1;//a 自增1
//	a++;//++后置
//	++a;//前置_++
//	printf("%d\n", a);
//
//	return 0;
//}



//int main()
//{
//	int a = 5;
//	int b = ++a;//a=6 b=6
//	//前置++
//	//口诀：先++，后使用
//	//a=a+1，b=a, 
//	printf("%d\n", a);
//	printf("%d\n", b);
//  return 0;
//}


//int main()
//{
//	int a = 5;
//	int b = a++;//a=6 b=5
//	//后置++
//	//口诀：先使用，后++
//	//b=a, a=a+1
//	printf("%d\n", a);
//	printf("%d\n", b);
//  return 0;
//}

//int main()
//{
//	int a = 5;
//	int b = a--;//b=5,a=4
//	//后置--
//	//口诀：先使用，后--
//	//b=a, a=a-1
//	printf("%d\n", a);
//	printf("%d\n", b);
//	return 0;
//}

//int main()
//{
//	int a = 5;
//	int b = --a;//a=4,b=4
//	//前置--
//	//口诀：先减减，后使用
//	//a=a-1，b=a
//	printf("%d\n", a);
//	printf("%d\n", b);
//	return 0;
//}

//int main()
//{
//	int a = 5;
//	printf("%d\n", --a);//先减去1，再打印
//	printf("%d\n", a--);//先打印出来，再减去1，变为3，但是3没有打印出来
//	printf("%d\n", a);//3
//
//
//	return 0;
//}


//int main()
//{
//	int a = -10;
//	printf("%d\n", +10);
//	printf("%d\n", +a);//运算符+对正负值没有影响，是⼀个完全可以省略的运算符，但是写了也不会报错,//int a = +10; 等价于 int a = 10;
//	printf("%d\n", -a);
//	printf("%d\n", 10);
//
//	return 0;
//}

int main()
{
	int a = (int)3.14;//强制转换为整数
	printf("%d\n", a);
	//int b = int(3.14);//err


	return 0;
}